class Solution {
public:
    bool check(vector<bool>& vecFlg,const vector<int>& nums,int k){
        
        if(k==1){
            return true;
        }
        if(k>nums.size() || 2*k>nums.size()){
            return false;
        }
        int nCnt=0;
        for(int i=1;i<k;++i){
            if(nums[i]>nums[i-1]){
                ++nCnt;
            }
        }
        if(nCnt==k-1){
            vecFlg[0]=true;
        }
        for(int i=1;i+k-1<nums.size();++i){
            if(nums[i]>nums[i-1]){
                --nCnt;
            }
            if(nums[i+k-1]>nums[i+k-2]){
                ++nCnt;
            }
            if(nCnt==k-1){
                vecFlg[i]=true;
            }
        }

        for(int i=0;i+k<nums.size();++i){
            if(vecFlg[i] && vecFlg[i+k]){
                return true;
            }
        }
        return false;
    }
    int maxIncreasingSubarrays(vector<int>& nums) {
        
        int left=1,right=nums.size()/2;
        int nRet=0;
        while(left<right){
            int mid=left+(right-left+1)/2;
            vector<bool> vecFlg(nums.size());
            if(check(vecFlg,nums,mid)){
                left=mid;
            }
            else{
                right=mid-1;
            }
        }
        return left;
    }
};
